컨텍스트는 PreparedStatement를 실행하는 JDBC의 작업 흐름이고, 전략은 PreparedStatement를 생성하는 것이다.

전략 클래스의 추가 정보

이번엔 add() 메소드에서 변하는 부분인 PreparedStatement를 만드는 코드를 AddStatement 클래스로 옮겨 담는다. 추가적으로 user라는 부가적인 정보가 필요해서 단순히 분리하면 컴파일 에러가 나게 되는데, AddStatement의 새성자를 통해 제공받게 만든다.

전략과 클라이언트의 동거

현재 구조는 DAO 메소드마다 새로운 StatementStrategy 구현 클래스를 만들어야 한다. 또한 부가적인 정보가 있는 경우, 이를 위해 오브젝트를 전달받는 생성자와 이를 저장해둘 인스턴스 변수를 번거롭게 만들어야 한다는 점이다. 이 구조는 DI 해준다는 점을 제외하면 템플릿 메소드 패턴을 적용했을 때보다 그다지 나은게 없다.

로컬 클래스

클래스 파일이 많아지는 문제는 간단하게 전략 클래스를 매번 독립된 파일로 만들지 말고 UserDao클래스 안에 내부 클래스로 정의해버리는 것이다.

익명 클래스